﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using LTorrent.Torrent.BEncode;

namespace LTorrent.Torrent.File
{
    /// <summary>
    /// just for fun
    /// TODO - Delete from Release Version =)
    /// </summary>
    #region XMLBuild
    class FileBEncodingXML : FileBEncoding
    {
        public FileBEncodingXML(string path) : base(path) { }


        private void BElementToXML(BElement Current, XmlWriter Writer, int order = 0)
        {
            
            if (Current == null) return;//корректная обработка некорректных файлов
            if (Current.STDItem != null)
            {//простой элемент запишем как аттрибут
                Writer.WriteAttributeString("STDType" + '_' + order.ToString(), Current.STDItem.ToString());
                return;
            }
            if (Current.LSTItem != null)
            {//список
                Writer.WriteStartElement("List");//данный метод записывает ноду <List>
                for (int i = 0; i < Current.LSTItem.Count; i++)
                    BElementToXML(Current.LSTItem[i], Writer, order);//рекурсивное раскручивание
                Writer.WriteEndElement();//закрываем ноду </List>
                return;
            }
            if (Current.DICItem != null)
            {//словарь (аналогично списку)
                Writer.WriteStartElement("Dictionary");
                for (int i = 0; i < Current.DICItem.Count; i++)
                {
                    Writer.WriteStartElement("Dictionary_Items");
                    BElementToXML(Current.DICItem[i][0], Writer, order);
                    BElementToXML(Current.DICItem[i][1], Writer, order + 1);
                    Writer.WriteEndElement();
                }
                Writer.WriteEndElement();
                return;
            }
            return;
        }
        public void ToXMLFile(string path)
        {
            using (XmlTextWriter XMLwr = new XmlTextWriter(path, System.Text.Encoding.Unicode))
            {
                XMLwr.Formatting = Formatting.Indented;
                XMLwr.WriteStartElement("Bencode_to_XML");
                foreach (BElement X in BenItems)
                {
                    XMLwr.WriteStartElement("BenItem");
                    BElementToXML(X, XMLwr);
                    XMLwr.WriteEndElement();
                }
                XMLwr.WriteEndElement();
            }
        }


    }
    #endregion
}
